

package geneontofx.association;

import java.util.Objects;


public class Association
{
    private String dbName;
    private String dbId;
    private String qualifier;
    private String goId;
    private String description;

    /**
     * Konstruktor klasy Annotation definiujący wszystkie parametry
     * @param dbName Nazwa bazy danych, z której białko pochodzi
     * @param dbId Identyfikator terminu w bazie dbName
     * @param qualifier Kwalifikator z bazy
     * @param goId Identyfikator z GeneOntology, który odpowiada danemu białku
     * @param description Krótki opis danego białka
     */
    public Association(String dbName, String dbId, String qualifier, String goId, String description)
    {
        this.dbName = dbName;
        this.dbId = dbId;
        this.qualifier = qualifier;
        this.goId = goId;
        this.description = description;
    }

    /**
     * Konstruktor tworzący pusty obiekt Annotation
     */
    public Association()
    {
        this.dbName = null;
        this.dbId = null;
        this.qualifier = null;
        this.goId = null;
        this.description = null;
    }


    /**
     * Funkcja zwracająca identyfikator białka
     * @return identyfikator białka
     */
    public String getDbId()
    {
        return dbId;
    }

    /**
     * Funkcja ustawiająca identifikator z bazy w annotacji
     * @param dbId Nowy identyfikator białka
     */
    public void setDbId(String dbId)
    {
        this.dbId = dbId;
    }

    /**
     * Funkcja zwracająca nazwę bazy, z której pochodzi białko 
     * @return Nazwa bazy, z której pochodzi białko 
     */
    public String getDbName()
    {
        return dbName;
    }

    /**
     * Funkcja ustawiająca nazwę bazy w annotacji
     * @param dbName Nowa nazwa bazy
     */
    public void setDbName(String dbName)
    {
        this.dbName = dbName;
    }
    
    /**
     * Funkcja zwracająca opis białka
     * @return opis białka
     */
    public String getDescription()
    {
        return description;
    }
    
    /**
     * Funkcja ustawiająca opis białka w annotacji
     * @param description Nowy opis białka
     */
    public void setDescription(String description)
    {
        this.description = description;
    }

    /**
     * Funkcja zwracająca pole identyfikator z GeneOntology
     * @return identyfikator z GeneOntology
     */
    public String getGoId() {
        return goId;
    }

    /**
     * Funkcja ustawiająca identyfikator GeneOntology w annotacji
     * @param goId Nowy identyfikator GeneOntology
     */
    public void setGoId(String goId)
    {
        this.goId = goId;
    }

    /**
     * Funkcja zwracająca kwalifikator białka
     * @return Kwalifikator białka
     */    
    public String getQualifier()
    {
        return qualifier;
    }

    /**
     * Funkcja ustawiająca kwalifikator w annotacji
     * @param qualifier kwalifikator białka
     */
    public void setQualifier(String qualifier)
    {
        this.qualifier = qualifier;
    }

    /**
     * Funkcja przedstawiająca obiekt Annotation w postaci Stringa
     * @return Opis terminu
     */
    @Override
    public String toString() {
        return "Annotation{" + "dbName=" + dbName + ", dbId=" + dbId + ", qualifier=" + qualifier + ", goId=" + goId + ", description=" + description + '}';
    }

    /**
     * Funkcja pozwalająca porównać ze sobą dwa obiekty typu Annotation
     * @param obj Porównywany obiekt
     * @return true jeśli obiekty są identyczne lub false jeśli są różne
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Association other = (Association) obj;
        if (!Objects.equals(this.dbName, other.dbName)) {
            return false;
        }
        if (!Objects.equals(this.dbId, other.dbId)) {
            return false;
        }
        if (!Objects.equals(this.qualifier, other.qualifier)) {
            return false;
        }
        if (!Objects.equals(this.goId, other.goId)) {
            return false;
        }
        if (!Objects.equals(this.description, other.description)) {
            return false;
        }
        return true;
    }

    /**
     * Funkcja zwracająca hashCode danego obiektu
     * @return Wartość hashCode'u
     */
    @Override
    public int hashCode() {
        int hash = 5;
        hash = 47 * hash + Objects.hashCode(this.dbName);
        hash = 47 * hash + Objects.hashCode(this.dbId);
        hash = 47 * hash + Objects.hashCode(this.qualifier);
        hash = 47 * hash + Objects.hashCode(this.goId);
        hash = 47 * hash + Objects.hashCode(this.description);
        return hash;
    }
    
    
    
    
    
    
}
